package db;

import beans.B_Equipo;
import beans.B_Persona;
import beans.B_Pregunta;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import beans.B_PreguntaResponsable;
import conexion.Conexion;
import java.sql.Types;

/**
 *
 * @author JoseHernan
 */
public class DB_PreguntaResponsable {

    public static String valPermisoPregunta(int idPregunta, int idUsuario) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_val_permiso_pregunta(?,?,?)}");

            cs.registerOutParameter("p_message", Types.INTEGER);
            cs.setInt("p_id_pregunta", idPregunta);
            cs.setInt("p_id_usuario", idUsuario);
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }
    
    public static String isAuditor(int idPlanAuditoria, int idUsuario) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_is_auditor(?,?,?)}");

            cs.registerOutParameter("p_message", Types.INTEGER);
            cs.setInt("p_id_plan_auditoria", idPlanAuditoria);
            cs.setInt("p_id_usuario", idUsuario);
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }

    public static ArrayList<B_PreguntaResponsable> getListByIdPregunta(int idPregunta) {
        ArrayList<B_PreguntaResponsable> list = new ArrayList<B_PreguntaResponsable>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;

            ps = con.prepareStatement(" select pr.id, pr.id_pregunta, pr.id_responsable, p.pregunta, per.apellidos, per.nombres "
                    + " from tbl_pregunta_responsable pr "
                    + " inner join tbl_pregunta p on p.id = pr.id_pregunta "
                    + " inner join tbl_equipo e	on e.id = pr.id_responsable "
                    + " inner join tbl_persona per on per.id = e.id_persona "
                    + " where pr.removed = false and p.removed = false and e.removed = false and per.removed = false "
                    + " and p.id = " + idPregunta);

            rs = ps.executeQuery();
            B_PreguntaResponsable obj;
            B_Pregunta objPregunta;
            B_Equipo objEquipo;
            B_Persona objPersona;
            while (rs.next()) {
                obj = new B_PreguntaResponsable();
                objPregunta = new B_Pregunta();
                objEquipo = new B_Equipo();
                objPersona = new B_Persona();
                //Asign values
                obj.setId(rs.getInt("id"));
                objPregunta.setId(rs.getInt("id_pregunta"));
                objPregunta.setPregunta(rs.getString("pregunta"));
                obj.setObjPregunta(objPregunta);
                objEquipo.setId(rs.getInt("id_responsable"));
                objPersona.setApellidos(rs.getString("apellidos"));
                objPersona.setNombres(rs.getString("nombres"));
                objEquipo.setObjPersona(objPersona);
                obj.setObjEquipo(objEquipo);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_PreguntaResponsable> getListById(int id) {
        ArrayList<B_PreguntaResponsable> list = new ArrayList<B_PreguntaResponsable>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;

            ps = con.prepareStatement(" select pr.id, pr.id_pregunta, pr.id_responsable, p.pregunta, per.apellidos, per.nombres "
                    + " from tbl_pregunta_responsable pr "
                    + " inner join tbl_pregunta p on p.id = pr.id_pregunta "
                    + " inner join tbl_equipo e	on e.id = pr.id_responsable "
                    + " inner join tbl_persona per on per.id = e.id_persona "
                    + " where pr.removed = false and p.removed = false and e.removed = false and per.removed = false "
                    + " and pr.id = " + id);

            rs = ps.executeQuery();
            B_PreguntaResponsable obj;
            B_Pregunta objPregunta;
            B_Equipo objEquipo;
            B_Persona objPersona;
            while (rs.next()) {
                obj = new B_PreguntaResponsable();
                objPregunta = new B_Pregunta();
                objEquipo = new B_Equipo();
                objPersona = new B_Persona();
                //Asign values
                obj.setId(rs.getInt("id"));
                objPregunta.setId(rs.getInt("id_pregunta"));
                objPregunta.setPregunta(rs.getString("pregunta"));
                obj.setObjPregunta(objPregunta);
                objEquipo.setId(rs.getInt("id_responsable"));
                objPersona.setApellidos(rs.getString("apellidos"));
                objPersona.setNombres(rs.getString("nombres"));
                objEquipo.setObjPersona(objPersona);
                obj.setObjEquipo(objEquipo);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_PreguntaResponsable> getListByIdResponsableAndIdPregunta(int idResponsable, int idPregunta) {
        ArrayList<B_PreguntaResponsable> list = new ArrayList<B_PreguntaResponsable>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;

            ps = con.prepareStatement(" select id, id_responsable from tbl_pregunta_responsable where id_pregunta = " + idPregunta + " and id_responsable = " + idResponsable + " and removed = false ");

            rs = ps.executeQuery();
            B_PreguntaResponsable obj;
            B_Equipo objEquipo;
            while (rs.next()) {
                obj = new B_PreguntaResponsable();
                objEquipo = new B_Equipo();
                //Asign values
                obj.setId(rs.getInt("id"));
                objEquipo.setId(rs.getInt("id_responsable"));
                obj.setObjEquipo(objEquipo);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_PreguntaResponsable> getListByIdPlanAuditoria(int idPlanAuditoria) {
        ArrayList<B_PreguntaResponsable> list = new ArrayList<B_PreguntaResponsable>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;

            ps = con.prepareStatement(" select pr.id, pr.id_pregunta, pr.id_responsable, p.pregunta, per.apellidos, per.nombres "
                    + " from tbl_pregunta_responsable pr "
                    + " inner join tbl_pregunta p on p.id = pr.id_pregunta "
                    + " inner join tbl_equipo e	on e.id = pr.id_responsable "
                    + " inner join tbl_persona per on per.id = e.id_persona "
                    + " where pr.removed = false and p.removed = false and e.removed = false and per.removed = false "
                    + " and e.id_plan_auditoria = " + idPlanAuditoria);

            rs = ps.executeQuery();
            B_PreguntaResponsable obj;
            B_Pregunta objPregunta;
            B_Equipo objEquipo;
            B_Persona objPersona;
            while (rs.next()) {
                obj = new B_PreguntaResponsable();
                objPregunta = new B_Pregunta();
                objEquipo = new B_Equipo();
                objPersona = new B_Persona();
                //Asign values
                obj.setId(rs.getInt("id"));
                objPregunta.setId(rs.getInt("id_pregunta"));
                objPregunta.setPregunta(rs.getString("pregunta"));
                obj.setObjPregunta(objPregunta);
                objEquipo.setId(rs.getInt("id_responsable"));
                objPersona.setApellidos(rs.getString("apellidos"));
                objPersona.setNombres(rs.getString("nombres"));
                objEquipo.setObjPersona(objPersona);
                obj.setObjEquipo(objEquipo);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    //SP CRUD
    public static String crud(B_PreguntaResponsable obj, String action) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_crud_pregunta_responsable(?,?,?,?,?,?)}");

            cs.registerOutParameter("p_message", Types.VARCHAR);
            cs.setString("p_action", action);
            cs.setInt("p_id", obj.getId());
            cs.setInt("p_id_pregunta", obj.getObjPregunta().getId());
            cs.setInt("p_id_responsable", obj.getObjEquipo().getId());
            cs.setString("p_user", obj.getUser());
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }
}
